package entity;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedNativeQueries;
import javax.persistence.NamedNativeQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@NamedNativeQueries({	
	@NamedNativeQuery(name="getPrevisao", query = "select * from previsao where id_usuario = :id_usuario ", 
												 resultClass = PrevisaoENT.class),
	@NamedNativeQuery(name="getPrevisaoMensal", query = "select * from previsao "
											  + "where id_usuario = :id_usuario "
											  + "and data_vencimento between :data_inicial and :data_final", 
												 resultClass = PrevisaoENT.class)
})

@Entity
@Table(name="previsao")
public class PrevisaoENT  implements Serializable{
/*------------------------------------------------------------------------------------*/	
	private static final long serialVersionUID = -808613820685993431L;
	@Id
	@GeneratedValue
	@Column(name="id",nullable = false)
	private int id;	
	
	
	@ManyToOne
	@JoinColumn(name="id_usuario",nullable = false)
	private UsuarioENT idUsuario;
	
	@Column(name="tipo", nullable = false)
	private String tipo;
	
	@Column(name="descricao",nullable = true)
	private String descricao;
	
	@Column(name="despesa_fixa", nullable = false)
	private Boolean despesaFixa;
	
	@ManyToOne
	@JoinColumn(name="id_conta_banco",nullable = false)
	private ContaBancoENT idContaBanco;
	
	@ManyToOne
	@JoinColumn(name="id_categoria_receita")
	private CategoriaReceitaENT idCategoriaReceita;
	
	@ManyToOne
	@JoinColumn(name="id_categoria_despesa")
	private CategoriaDespesaENT idCategoriaDespesa;
	
	@ManyToOne
	@JoinColumn(name="id_subcategoria_despesa")
	private SubCategoriaDespesaENT idSubcategoriaDespesa;	
	
	@Column(name="valor_pagar",nullable = false, length = 4 ,precision = 2)
	private Double valorPagar;
	
	@Column(name="valor_pago",nullable = false, length = 4 ,precision = 2)
	private Double valorPago;
	
	@Column(name="valor_estimado",nullable = false, length = 4 ,precision = 2)
	private Double valorEstimado;
	
	@Column(name="data_pagamento",nullable = false)
	@Temporal(TemporalType.TIMESTAMP)		
	private Date dtPagamento;
	
	@Column(name="data_vencimento",nullable = false)
	@Temporal(TemporalType.TIMESTAMP)		
	private Date dtVencimento;
/*------------------------------------------------------------------------------------*/

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public UsuarioENT getIdUsuario() {
		return idUsuario;
	}

	public void setIdUsuario(UsuarioENT idUsuario) {
		this.idUsuario = idUsuario;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Boolean getDespesaFixa() {
		return despesaFixa;
	}

	public void setDespesaFixa(Boolean despesaFixa) {
		this.despesaFixa = despesaFixa;
	}

	public ContaBancoENT getIdContaBanco() {
		return idContaBanco;
	}

	public void setIdContaBanco(ContaBancoENT idContaBanco) {
		this.idContaBanco = idContaBanco;
	}

	public CategoriaReceitaENT getIdCategoriaReceita() {
		return idCategoriaReceita;
	}

	public void setIdCategoriaReceita(CategoriaReceitaENT idCategoriaReceita) {
		this.idCategoriaReceita = idCategoriaReceita;
	}

	public CategoriaDespesaENT getIdCategoriaDespesa() {
		return idCategoriaDespesa;
	}

	public void setIdCategoriaDespesa(CategoriaDespesaENT idCategoriaDespesa) {
		this.idCategoriaDespesa = idCategoriaDespesa;
	}

	public SubCategoriaDespesaENT getIdSubcategoriaDespesa() {
		return idSubcategoriaDespesa;
	}

	public void setIdSubcategoriaDespesa(
			SubCategoriaDespesaENT idSubcategoriaDespesa) {
		this.idSubcategoriaDespesa = idSubcategoriaDespesa;
	}

	public Date getDtVencimento() {
		return dtVencimento;
	}

	public void setDtVencimento(Date dtVencimento) {
		this.dtVencimento = dtVencimento;
	}

	public Double getValorPagar() {
		return valorPagar;
	}

	public void setValorPagar(Double valorPagar) {
		this.valorPagar = valorPagar;
	}

	public Double getValorPago() {
		return valorPago;
	}

	public void setValorPago(Double valorPago) {
		this.valorPago = valorPago;
	}

	public Double getValorEstimado() {
		return valorEstimado;
	}

	public void setValorEstimado(Double valorEstimado) {
		this.valorEstimado = valorEstimado;
	}

	public Date getDtPagamento() {
		return dtPagamento;
	}

	public void setDtPagamento(Date dtPagamento) {
		this.dtPagamento = dtPagamento;
	}

	public PrevisaoENT() {
		super();
	}
}

